package com.mathdroid.modules;

import java.util.LinkedList;

import com.mathdroid.model.enums.EArmorProficiency;
import com.mathdroid.model.enums.EItemSlot;
import com.mathdroid.model.enums.EWeaponProficiency;

/**
 * Each specialization has its proficiencies for weapons, armor and modules.
 * If a specialization hasn't a proficiency, items with that proficiency 
 * requirement should not be listed in the item browser.
 */
public interface ISpecProficiencies {
	
	/**
	 * Get the weapon types that the character can wear. <b>Important:</b> This
	 * should be ordered. The Mainhand slot comes first, 
	 * the Offhand slot second.
	 * @return Weapon proficiencies.
	 */
	LinkedList<EWeaponProficiency> getWeaponProficiencies();
	
	/**
	 * Get the left and right weapon slot. <b>Important:</b> This
	 * should be ordered. The Mainhand slot comes first, 
	 * the Offhand slot second.
	 * @return Weapon slots, Mainhand and Offhand.
	 */
	LinkedList<EItemSlot> getWeaponSlots();
	
	/**
	 * Get the armor types that the character SHOULD wear.
	 * @return Armor proficiencies.
	 */
	LinkedList<EArmorProficiency> getArmorProficiency();
	
	/**
	 * @param p EWeaponProficiency.
	 * @return If the specialization has the weapon proficiency.
	 */
	boolean hasWeaponProficiency(EWeaponProficiency p);
	
	/**
	 * @param p EArmorProficiency.
	 * @return If the specialization has the armor proficiency.
	 */
	boolean hasArmorProficiency(EArmorProficiency p);
}
